//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
//        每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
//        注意：给定 n 是一个正整数
//        示例 1：
//        输入： 3
//        输出： 3
//        解释： 有三种方法可以爬到楼顶。
//        1.  1 阶 + 1 阶 + 1 阶
//        2.  1 阶 + 2 阶
//        3.  2 阶 + 1 阶
public class leetcode_70 {
    public static void main(String[] args) {
        leetcode_70 leetcode_70 = new leetcode_70();
        int i = leetcode_70.climbStairs(3);
    }
    //方法一：动态规划
//        复杂度分析
//        时间复杂度：循环执行 nn 次，每次花费常数的时间代价，故渐进时间复杂度为 O(n)。
//        空间复杂度：这里只用了常数个变量作为辅助空间，故渐进空间复杂度为 O(1)。
    public int climbStairs(int n){
        int p=0,q=0,r=1;
        for(int i=1;i<=n;i++){
            p=q;
            q=r;
            r=p+q;
        }
        return r;
    }
}
